package jp.yyoo.signalfilter;


public class FirFilter implements IFilter
{
	
	private CircularBuffer buf;
	private double[] aVec;
	
	public FirFilter( double[] aVec ) 
	{
		this.aVec = aVec;
		buf = new CircularBuffer( aVec.length-1 );
	}
	
	/* INTERFACE signalfilter.IFilter */
	
	public double getValue( double a )
	{
		double result = a * aVec[0];
		
		int len = buf.getCount();
		for ( int i = 0; i < len ; i++)
		{
			result += buf.getValueAt(i) * aVec[i + 1];
		}
		buf.insert(a);
		return result;
	}

	public int getValue( int a )
	{
		double result = aVec[0] * a;
		
		int len = buf.getCount();
		for ( int i = 0; i < len ; i++)
		{
			result += buf.getValueAt(i) * aVec[i + 1];
		}
		buf.insert(a);
		return (int)( result );
	}
	
	public void clear()
	{
		for ( int i = buf.getCount(); i > 0 ; i--)
			buf.insert(0);
	}
	
}